home *** CD-ROM | disk | FTP | other *** search
- #if __SASC
- #include "snap.h"
- #endif
-
- IMPORT struct RastPort rp;
-
- Point OldFrame[9];
- Point NewFrame[9];
- LONG OFType = 0;
- UWORD Ptrn;
-
- STATIC VOID MultiDraw(rp, num, xy)
- struct RastPort *rp;
- LONG num;
- Point *xy;
- {
- REGISTER LONG i = 0;
- REGISTER Point *coord = xy;
- while (i<num) {
- Move(rp, (LONG)coord->x, (LONG)coord->y);
- coord++;
- Draw(rp, (LONG)coord->x, (LONG)coord->y);
- i++;
- }
- }
-
- VOID crawl_frame(dir)
- LONG dir;
- {
- REGISTER UWORD temp = Ptrn;
- if (dir) {
- Ptrn = ((Ptrn<<1) & 0xfffe) | ((Ptrn & 0x8000)>>15);
- } else {
- Ptrn = ((Ptrn>>1) & 0x7fff) | ((Ptrn & 1)<<15);
- }
- temp ^= Ptrn;
- SetDrPt(&rp, temp);
- MultiDraw(&rp, OFType, &OldFrame[0]);
- SetDrPt(&rp, Ptrn);
- }
-
- VOID erase_frame()
- {
- if (OFType) {
- MultiDraw(&rp, OFType, &OldFrame[0]);
- OFType = 0;
- }
- }
-
- VOID draw_frame(ft)
- LONG ft;
- {
- REGISTER LONG i;
- /* Remove old frame */
- WaitTOF();
- erase_frame();
- /* Draw the new frame */
- SetDrPt(&rp, Ptrn);
- MultiDraw(&rp, ft, &NewFrame[0]);
- /* save the frame for erasing later */
- for (i=0; i<=ft; i++) {
- OldFrame[i].x = NewFrame[i].x;
- OldFrame[i].y = NewFrame[i].y;
- }
- OFType = ft;
- }
-